์ผ๊ด ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ดํดํ๊ณ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ฌ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ์ฑ๋ฅ์ ๋ฐํํ์ธ์. React๊ฐ ๋์์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ ๋๋ง์ ์ต์ ํํ์ฌ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
React ์ผ๊ด ์ ๋ฐ์ดํธ ์ฐ์ ์์: ์ํ ๋ณ๊ฒฝ ์ค์๋ ๋ญํน ๋ง์คํฐํ๊ธฐ
React์ ํจ์จ์ฑ์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ์ฌ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ต์ํํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฅ๋ ฅ์์ ๋น๋กฏ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ React๊ฐ ์ด๋ฌํ ์ผ๊ด ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ด๋ป๊ฒ ์ ํ๋์ง ์ดํดํ๋ ๊ฒ์, ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ์ฑ๋ฅ ์ข์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ผ๊ด ์ ๋ฐ์ดํธ๋ ๋ฌด์์ธ๊ฐ?
์ผ๊ด ์ ๋ฐ์ดํธ๋ React๊ฐ ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋จ์ผ ๋ฆฌ๋ ๋๋ง ์ฃผ๊ธฐ๋ก ๊ทธ๋ฃนํํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ฐ ์ํ ์ ๋ฐ์ดํธ๋ ์ ์ฌ์ ์ผ๋ก ์ปดํฌ๋ํธ์ ๊ทธ ์์๋ค์ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ํนํ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํจ์ผ๋ก์จ React๋ ๋ถํ์ํ ๊ณ์ฐ์ ํผํ๊ณ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์์ฑ์ ํฅ์์ํต๋๋ค.
React 18 ์ด์ ์๋ ์ผ๊ด ์ฒ๋ฆฌ๊ฐ ์ฃผ๋ก React ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด์์ ์์๋ ์ ๋ฐ์ดํธ์ ๊ตญํ๋์์ต๋๋ค. `setTimeout`์ด๋ `fetch` ์ฝ๋ฐฑ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์ฝ๋์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ์๋์ผ๋ก ์ผ๊ด ์ฒ๋ฆฌ๋์ง ์์์ต๋๋ค. React 18์ ์๋ ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ๋์ ํ์ฌ, ์ด์ ์ ๋ฐ์ดํธ๊ฐ ์ด๋์ ์์๋์๋์ง์ ๊ด๊ณ์์ด ์ผ๊ด ์ฒ๋ฆฌ๋์ด ๋ง์ ์๋๋ฆฌ์ค์์ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ต๋๋ค.
์ฐ์ ์์ ์ง์ ์ ์ค์์ฑ
์๋ ์ผ๊ด ์ฒ๋ฆฌ๊ฐ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค์ง๋ง, ๋ชจ๋ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฑํ๊ฒ ์์ฑ๋๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ค ์ ๋ฐ์ดํธ๋ ๋ค๋ฅธ ์ ๋ฐ์ดํธ๋ณด๋ค ์ฌ์ฉ์ ๊ฒฝํ์ ๋ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณด์ด๋ ์์์ ๊ทธ ์ฆ๊ฐ์ ์ธ ์ํธ์์ฉ์ ์ง์ ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋ ์ ๋ฐ์ดํธ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ ๋ก๊น ์ ๊ด๋ จ๋ ์ ๋ฐ์ดํธ๋ณด๋ค ๋ ์ค์ํฉ๋๋ค.
React 18์์ ๋์ ๋ React์ ๋์์ฑ ๋ ๋๋ง ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์์ ์ํฅ์ ๋ฏธ์น ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ํนํ ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ด ๋ถ๋๋ฝ๊ณ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ด ํ์์ ์ธ ์์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. React๊ฐ ์ ๋ฐ์ดํธ ์ฐ์ ์์ ๊ด๋ฆฌ๋ฅผ ์ํด ์ ๊ณตํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋๊ตฌ๋ `useTransition`๊ณผ `useDeferredValue`์ ๋๋ค.
`useTransition` ์ดํดํ๊ธฐ
`useTransition`์ ํน์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ *๊ธด๊ธํ์ง ์์* ๋๋ *์ ํ(transitional)*์ผ๋ก ํ์ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ React๊ฐ ์ด๋ฌํ ํ์๋ ์ ๋ฐ์ดํธ๋ณด๋ค (์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฐ์) ๊ธด๊ธํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ํ ์ ๋ฐ์ดํธ๊ฐ ์์๋๋ฉด React๋ ์๋ก์ด ์ํ ๋ ๋๋ง์ ์์ํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๊ธด๊ธํ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด ๋ ๋๋ง์ ์ค๋จํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
`useTransition`์ ์๋ ๋ฐฉ์
`useTransition`์ ๋ ๊ฐ์ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค:
- `isPending`: ์ ํ์ด ํ์ฌ ํ์ฑ ์ํ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
- `startTransition`: ์ ํ์ผ๋ก ํ์ํ๋ ค๋ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ธ๋ ํจ์์ ๋๋ค.
์์ : ๋๊ท๋ชจ ๋ชฉ๋ก ํํฐ๋งํ๊ธฐ
๋๊ท๋ชจ ํญ๋ชฉ ๋ชฉ๋ก์ด ์๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ผ ํํฐ๋งํ๋ ค๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด๋ณด์ญ์์ค. `useTransition`์ด ์๋ค๋ฉด ๊ฐ ํค ์ ๋ ฅ์ด ์ ์ฒด ๋ชฉ๋ก์ ๋ฆฌ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋๋ ค์ง ์ ์์ต๋๋ค.
๋ค์์ `useTransition`์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค:
import React, { useState, useTransition } from 'react';
function FilterableList({ items }) {
const [filterText, setFilterText] = useState('');
const [isPending, startTransition] = useTransition();
const [filteredItems, setFilteredItems] = useState(items);
const handleChange = (e) => {
const text = e.target.value;
setFilterText(text);
startTransition(() => {
const newFilteredItems = items.filter(item =>
item.toLowerCase().includes(text.toLowerCase())
);
setFilteredItems(newFilteredItems);
});
};
return (
<div>
<input type="text" value={filterText} onChange={handleChange} />
{isPending ? <p>Filtering... : null}
<ul>
{filteredItems.map(item => (<li key={item}>{item}</li>))}
</ul>
</div>
);
}
export default FilterableList;
์ด ์์ ์์ `startTransition` ํจ์๋ `filteredItems`์ ๋ํ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ธ๊ณ ์์ต๋๋ค. ์ด๋ React์๊ฒ ์ด ์ ๋ฐ์ดํธ๊ฐ ๊ธด๊ธํ์ง ์์ผ๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ์ค๋จ๋ ์ ์์์ ์๋ ค์ค๋๋ค. `isPending` ๋ณ์๋ ํํฐ๋ง์ด ์งํ๋๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
`useTransition`์ ์ฅ์
- ๋ฐ์์ฑ ํฅ์: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ค์๋ UI์ ๋ฐ์์ฑ์ ์ ์งํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ์ง์ฐ ๊ฐ์: ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ ๊ธฐํ ๊ธด๊ธํ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ์ฉํ์ฌ ์ฒด๊ฐ๋๋ ์ง์ฐ์ ์ต์ํํฉ๋๋ค.
`useDeferredValue` ์ดํดํ๊ธฐ
`useDeferredValue`๋ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋ ์ค์ํ ์ ๋ฐ์ดํธ๊ฐ ์ฒ๋ฆฌ๋ ํ์ ๊ฐ์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ฆ์ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์๋ ํ์ ๋ฐ์ดํฐ๊ฐ ์๋ ์๋๋ฆฌ์ค์ ์ ์ฉํฉ๋๋ค.
`useDeferredValue`์ ์๋ ๋ฐฉ์
`useDeferredValue`๋ ๊ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ทธ ๊ฐ์ ์ง์ฐ๋ ๋ฒ์ ์ ๋ฐํํฉ๋๋ค. React๋ ๋ชจ๋ ๊ธด๊ธํ ์ ๋ฐ์ดํธ๋ฅผ ์๋ฃํ ํ์๋ง ์ง์ฐ๋ ๊ฐ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๋๋ผ๋ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ : ๊ฒ์ ๊ฒฐ๊ณผ ๋๋ฐ์ด์ฑํ๊ธฐ
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๋์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ๋ ค๋ ๊ฒ์ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด๋ณด์ญ์์ค. ํ์ง๋ง ๋ชจ๋ ํค ์ ๋ ฅ๋ง๋ค API๋ฅผ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ถ์ง๋ ์์ ๊ฒ์ ๋๋ค. `useDeferredValue`๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฐ์ด์ฑํ๊ณ ์งง์ ์ง์ฐ ํ์๋ง ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
import React, { useState, useEffect, useDeferredValue } from 'react';
function SearchComponent() {
const [searchTerm, setSearchTerm] = useState('');
const deferredSearchTerm = useDeferredValue(searchTerm);
const [searchResults, setSearchResults] = useState([]);
useEffect(() => {
// Simulate an API call to fetch search results
const fetchSearchResults = async () => {
// Replace with your actual API call
const results = await simulateApiCall(deferredSearchTerm);
setSearchResults(results);
};
fetchSearchResults();
}, [deferredSearchTerm]);
const handleChange = (e) => {
setSearchTerm(e.target.value);
};
return (
<div>
<input type="text" value={searchTerm} onChange={handleChange} />
<ul>
{searchResults.map(result => (<li key={result}>{result}</li>))}
</ul>
</div>
);
}
// Simulate an API call
async function simulateApiCall(searchTerm) {
return new Promise(resolve => {
setTimeout(() => {
const results = [];
for (let i = 0; i < 5; i++) {
results.push(`${searchTerm} Result ${i}`);
}
resolve(results);
}, 500);
});
}
export default SearchComponent;
์ด ์์ ์์๋ `useDeferredValue`๋ฅผ ์ฌ์ฉํ์ฌ `searchTerm`์ ์ง์ฐ๋ ๋ฒ์ ์ ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ `useEffect` ํ ์ `deferredSearchTerm`์ ์ฌ์ฉํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ์ ํ์ดํ์ ๋ฉ์ถ ํ์๋ง API ํธ์ถ์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก ๋ถํ์ํ API ํธ์ถ ์๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
`useDeferredValue`์ ์ฅ์
- API ํธ์ถ ๊ฐ์: ์ ๋ฐ์ดํธ๋ฅผ ๋๋ฐ์ด์ฑํ์ฌ ๋ถํ์ํ API ํธ์ถ์ ์ต์ํํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์์ผ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
๋ค์ํ ๊ธ๋ก๋ฒ ์๋๋ฆฌ์ค์ ๊ฑธ์น ์ค์ ์์
์ผ๊ด ์ ๋ฐ์ดํธ์ ์ฐ์ ์์ ๋ ๋๋ง์ ๊ฐ๋ ์ ๋ค์ํ ๊ธ๋ก๋ฒ ์๋๋ฆฌ์ค์์ ๋ฐ์์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์์ ๋๋ค:
- ์ ์์๊ฑฐ๋ ํ๋ซํผ (๊ธ๋ก๋ฒ): ์ฌ๋ฌ ํตํ์ ์ธ์ด๋ก ์ ํ์ ํ์ํ๋ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ. ๊ฐ๊ฒฉ ๋ณํ ๋ฐ ์ธ์ด ๋ฒ์ญ ์ ๋ฐ์ดํธ๋ `useTransition`์ ์ฌ์ฉํ์ฌ ์ ํ์ผ๋ก ํ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ด ์ ์ํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋์์ ์ผํํ๋ ์ฌ์ฉ์๊ฐ ํตํ๋ฅผ USD์์ INR๋ก ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ํด๋ณด์ธ์. ๋ถ์ฐจ์ ์ธ ์์ ์ธ ํตํ ๋ณํ์ ๊ธฐ๋ณธ ์ํธ์์ฉ์ ๋ฐฉํดํ์ง ์๋๋ก `useTransition`์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ์ ๋ฌธ์ ํธ์ง๊ธฐ (๊ตญ์ ํ): ๋ค๋ฅธ ์๊ฐ๋์ ์๋ ํ๋ค์ด ์ฌ์ฉํ๋ ๋ฌธ์ ํธ์ง๊ธฐ. ์๊ฒฉ ํ์ ์์ ์ ๋ฐ์ดํธ๋ `useDeferredValue`๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ์ํฌ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฆ์ ๋๊ธฐํ๋ก ์ธํด UI๊ฐ ๋๋ ค์ง๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๋ด์๊ณผ ๋์ฟ์ ์๋ ๋ฉค๋ฒ๋ค์ด ํ ๋ฌธ์์์ ์์ ํ๋ค๊ณ ์๊ฐํด๋ณด์ธ์. ๋ด์์์์ ํ์ดํ ์๋์ ํธ์ง์ ๋์ฟ์์ ์ค๋ ์ง์์ ์ธ ์๊ฒฉ ์ ๋ฐ์ดํธ์ ์ํด ๋ฐฉํด๋ฐ์์๋ ์ ๋ฉ๋๋ค; `useDeferredValue`๋ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ค์๊ฐ ์ฃผ์ ๊ฑฐ๋ ํ๋ซํผ (์ ์ธ๊ณ ํฌ์์): ์ค์๊ฐ ์ฃผ์ ์์ธ๋ฅผ ํ์ํ๋ ๊ฑฐ๋ ํ๋ซํผ. ํต์ฌ ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋์ ๋ฐ์์ฑ์ ์ ์งํด์ผ ํ์ง๋ง, ๋ด์ค ํผ๋๋ ์์ ๋ฏธ๋์ด ํตํฉ๊ณผ ๊ฐ์ ๋ ์ค์ํ ์ ๋ฐ์ดํธ๋ `useTransition`์ ์ฌ์ฉํ์ฌ ๋ฎ์ ์ฐ์ ์์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ฐ๋์ ํธ๋ ์ด๋๋ ์์ฅ ๋ฐ์ดํฐ์ ์ฆ์ ์ ๊ทผํด์ผ ํ๋ฉฐ, ์๋ณด ํค๋๋ผ์ธ๊ณผ ๊ฐ์ ๋ถ์ฐจ์ ์ธ ์ ๋ณด(`useTransition`์ผ๋ก ์ฒ๋ฆฌ)๋ ์ค์๊ฐ ๋ฐ์ดํฐ ํ์๋ผ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ฐฉํดํด์๋ ์ ๋ฉ๋๋ค.
- ์ธํฐ๋ํฐ๋ธ ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ (๊ธ๋ก๋ฒ ์ฌํ์): ์๋ฐฑ๋ง ๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ(์: ๊ด์ฌ ์ง์ )๋ฅผ ํ์ํ๋ ์ธํฐ๋ํฐ๋ธ ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ . ์ง๋๋ฅผ ํํฐ๋งํ๊ฑฐ๋ ํ๋/์ถ์ํ๋ ๊ฒ์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ผ ์ ์์ต๋๋ค. `useTransition`์ ์ฌ์ฉํ์ฌ ์ง๋๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋ฆฌ๋ ๋๋ง๋ ๋์๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ด ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ฒ ๋ฅผ๋ฆฐ์ ์ฌ์ฉ์๊ฐ ์์ธํ ์ง๋๋ฅผ ํ๋ํ๋ ๋ชจ์ต์ ์์ํด๋ณด์ธ์; ๋ฆฌ๋ ๋๋ง ์ค ๋ฐ์์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ง๋ ๋ฆฌ๋ ๋๋ง ์์ ์ `useTransition`์ผ๋ก ํ์ํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ์์ ๋ฏธ๋์ด ํ๋ซํผ (๋ค์ํ ์ฝํ ์ธ ): ํ ์คํธ, ์ด๋ฏธ์ง, ๋น๋์ค์ ๊ฐ์ ๋ค์ํ ์ฝํ ์ธ ๊ฐ ์๋ ์์ ๋ฏธ๋์ด ํผ๋. ์ ๊ฒ์๋ฌผ์ ๋ก๋ํ๊ณ ๋ ๋๋งํ๋ ๊ฒ์ ๋ค๋ฅด๊ฒ ์ฐ์ ์์๋ฅผ ์ ํ ์ ์์ต๋๋ค. '์ข์์'๋ ๋๊ธ ๋ฌ๊ธฐ์ ๊ฐ์ ์ฌ์ฉ์ ํ๋์ ์ฐ์ ์์๊ฐ ๋์์ผ ํ๋ฉฐ, ์๋ก์ด ๋ฏธ๋์ด ์ฝํ ์ธ ๋ก๋ฉ์ `useDeferredValue`๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ์์ ๋ฏธ๋์ด ํผ๋๋ฅผ ์คํฌ๋กคํ๋ค๊ณ ์์ํด๋ณด์ธ์; '์ข์์'๋ ๋๊ธ๊ณผ ๊ฐ์ ์ํธ์์ฉ ์์๋ ์ฆ๊ฐ์ ์ธ ๋ฐ์์ด ํ์ํ์ง๋ง(๋์ ์ฐ์ ์์), ํฐ ์ด๋ฏธ์ง๋ ๋น๋์ค ๋ก๋ฉ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์ฝ๊ฐ ์ง์ฐ๋ ์ ์์ต๋๋ค(๋ฎ์ ์ฐ์ ์์).
์ํ ์ ๋ฐ์ดํธ ์ฐ์ ์์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
React์์ ์ํ ์ ๋ฐ์ดํธ ์ฐ์ ์์๋ฅผ ๊ด๋ฆฌํ ๋ ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ค์ ์ ๋ฐ์ดํธ ์๋ณ: ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ฅ ์ค์ํ ์ ๋ฐ์ดํธ๊ฐ ๋ฌด์์ธ์ง ํ์ ํ๊ณ ์ฐ์ ์์๋ฅผ ์ ํ์ญ์์ค.
- ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ์ `useTransition` ์ฌ์ฉ: ์๊ฐ์ ๋ฏผ๊ฐํ์ง ์์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ `startTransition`์ผ๋ก ๊ฐ์ธ์ญ์์ค.
- ํ์ ๋ฐ์ดํฐ์ `useDeferredValue` ์ฌ์ฉ: ์ฆ์ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์๋ ํ์ ๋ฐ์ดํฐ์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํค์ญ์์ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: React DevTools๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ญ์์ค.
- ์ฝ๋ ํ๋กํ์ผ๋ง: React์ Profiler ๋๊ตฌ๋ ์ปดํฌ๋ํธ ๋ ๋๋ง ๋ฐ ์ ๋ฐ์ดํธ ์ฑ๋ฅ์ ๋ํ ์์ธํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์ฌ์ฉ ๊ณ ๋ ค: `React.memo`, `useMemo`, `useCallback`์ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ๊ณ์ฐ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ์ญ์์ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ต์ ํ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ํ ์ ๋ฐ์ดํธ์ ๊ณ์ฐ ๋น์ฉ์ ์ต์ํํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ํ ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด Immutable.js๋ Immer ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง: ๊ณผ๋ํ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋น๋๋ฅผ ์ ์ดํ์ญ์์ค. Lodash๋ Underscore์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ์๋ฅผ ๋๋ฐ์ด์ฑํ๊ณ ์ค๋กํ๋งํ๋ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ํจ์
- `useTransition`์ ๋จ์ฉ: ๋ชจ๋ ์ํ ์ ๋ฐ์ดํธ๋ฅผ `startTransition`์ผ๋ก ๊ฐ์ธ์ง ๋ง์ญ์์ค. ์ง์ ์ผ๋ก ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ์๋ง ์ฌ์ฉํ์ญ์์ค.
- `useDeferredValue`์ ์ค์ฉ: UI์ ์ค์ํ ๊ฐ์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํค์ง ๋ง์ญ์์ค.
- ์ฑ๋ฅ ์งํ ๋ฌด์: ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ญ์์ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์๊ธฐ: ์ปดํฌ๋ํธ์ ๊ณ์ฐ์ ๋ฉ๋ชจ์ด์ฆํ์ง ์์ผ๋ฉด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง๊ณผ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ํ ์ ๋ฐ์ดํธ ์ฐ์ ์์๋ฅผ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ์ฑ๋ฅ ์ข์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. `useTransition`๊ณผ `useDeferredValue`๋ฅผ ํ์ฉํ์ฌ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ๊ณ ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํด์ผ๋ก์จ ๋ ๋ถ๋๋ฝ๊ณ ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๊ณ , ์ฑ๋ฅ ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ์ ๊ณต๋ ์์ ๋ค์ ์ด๋ฌํ ๊ฐ๋ ์ด ์ ์ธ๊ณ์ ๋ค์ํ ์๋๋ฆฌ์ค์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, ์ต์ ์ ๋ฐ์์ฑ์ผ๋ก ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋ง์กฑ์ํค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ค๋๋ค.